﻿namespace Innovative.ProXr
{
	public static partial class DirectApi
	{
		/// <summary>
		/// These commands are called Bank Specified commands. They allow a bank to be specified on
		/// every call.
		/// </summary>
		public static class SpecifiedBank
		{
			#region Off
			/// <summary>
			/// Turn off Relay 0 in Specified Bank.
			/// If the Bank Value is 0, this command will be directed to all available relay banks.
			/// An optional Parameter may be included to turn off the next 1 to 7 relays.
			/// </summary>
			public static RelayCommandSet<bool, int, RelayCount> RelayZeroOff = new RelayCommandSet<bool, int, RelayCount>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 100),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank"),
					RelayCommand.CreateOptionalParameterCommand(3, new RelayByte[] { 1, 2, 3, 4, 5, 6, 7 }, "NextRelayCount")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter(),
				Parameter2Converter = new RelayCountParameterConverter()
			};

			/// <summary>
			/// Turn Off Relay 1 in Specified Bank.
			/// If the Bank Value is 0, this command will be directed to available relay banks.
			/// An optional parameter may be included to turn off the next 1 to 6 relays.
			/// </summary>
			public static RelayCommandSet<bool, int, RelayCount> RelayOneOff = new RelayCommandSet<bool, int, RelayCount>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 101),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank"),
					RelayCommand.CreateOptionalParameterCommand(3, new RelayByte[] { 1, 2, 3, 4, 5, 6 }, "NextRelayCount")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter(),
				Parameter2Converter = new RelayCountParameterConverter()
			};

			/// <summary>
			/// Turn Off Relay 2 in Specified Bank.
			/// If the Bank Value is 0, this command will be directed to all available relay banks.
			/// An optional parameter may be included to turn off the next 1 to 5 relays.
			/// </summary>
			public static RelayCommandSet<bool, int, RelayCount> RelayTwoOff = new RelayCommandSet<bool, int, RelayCount>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 102),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank"),
					RelayCommand.CreateOptionalParameterCommand(3, new RelayByte[] { 1, 2, 3, 4, 5 }, "NextRelayCount")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter(),
				Parameter2Converter = new RelayCountParameterConverter()
			};

			/// <summary>
			/// Turn Off Relay 3 in Specified Bank.
			/// If the Bank Value is 0, this command will be directed to all available relay banks.
			/// A optional parameter may be included to turn off the next 1 to 4 relays.
			/// </summary>
			public static RelayCommandSet<bool, int, RelayCount> RelayThreeOff = new RelayCommandSet<bool, int, RelayCount>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 103),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank"),
					RelayCommand.CreateOptionalParameterCommand(3, new RelayByte[] { 1, 2, 3, 4 }, "NextRelayCount")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter(),
				Parameter2Converter = new RelayCountParameterConverter()
			};

			/// <summary>
			/// Turn Off Relay 4 in Specified Bank.
			/// If the Bank Value is 0, this command will be directed to all available relay banks.
			/// An optional parameter may be included to turn of the next 1 to 3 relays.
			/// </summary>
			public static RelayCommandSet<bool, int, RelayCount> RelayFourOff = new RelayCommandSet<bool, int, RelayCount>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 104),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank"),
					RelayCommand.CreateOptionalParameterCommand(3, new RelayByte[] { 1, 2, 3 }, "NextRelayCount")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter(),
				Parameter2Converter = new RelayCountParameterConverter()
			};

			/// <summary>
			/// Turn Off Relay 5 in Specified Bank.
			/// If the Bank Value is 0, this command will be directed to all available relay banks.
			/// An optional parameter may be included to turn off the next 1 to 2 relays.
			/// </summary>
			public static RelayCommandSet<bool, int, RelayCount> RelayFiveOff = new RelayCommandSet<bool, int, RelayCount>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 105),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank"),
					RelayCommand.CreateOptionalParameterCommand(3, new RelayByte[] { 1, 2 }, "NextRelayCount")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter(),
				Parameter2Converter = new RelayCountParameterConverter()
			};

			/// <summary>
			/// Turn Off Relay 6 in Specified Bank.
			/// If the Bank Value is 0, this command will be directed to all available relay banks.
			/// An optional parameter may be included to turn off the next relay.
			/// </summary>
			public static RelayCommandSet<bool, int, RelayCount> RelaySixOff = new RelayCommandSet<bool, int, RelayCount>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 106),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank"),
					RelayCommand.CreateOptionalParameterCommand(3, new RelayByte[] { 1 }, "NextRelayCount")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter(),
				Parameter2Converter = new RelayCountParameterConverter()
			};

			/// <summary>
			/// Turn Off Relay 7 in Specified Bank. If the Bank Value is 0, this command will be directed to all available relay banks.
			/// </summary>
			public static RelayCommandSet<bool, int> RelaySevenOff = new RelayCommandSet<bool, int>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 107),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter()
			};
			#endregion

			#region On
			/// <summary>
			/// Turn On Relay 0 in Specified Bank.
			/// If the Bank Value is 0, this command will be directed to all available relay banks.
			/// An optional parameter may be included to turn on the next 1 to 7 relays.
			/// </summary>
			public static RelayCommandSet<bool, int, RelayCount> RelayZeroOn = new RelayCommandSet<bool, int, RelayCount>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 108),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank"),
					RelayCommand.CreateOptionalParameterCommand(3, new RelayByte[] { 1, 2, 3, 4, 5, 6, 7 }, "NextRelayCount")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter(),
				Parameter2Converter = new RelayCountParameterConverter()
			};

			/// <summary>
			/// Turn On Relay 1 in Specified Bank.
			/// If the Bank Value is 0, this command will be directed to all available relay banks.
			/// An optional parameter may be included to turn on the next 1 to 6 relays.
			/// </summary>
			public static RelayCommandSet<bool, int, RelayCount> RelayOneOn = new RelayCommandSet<bool, int, RelayCount>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 109),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank"),
					RelayCommand.CreateOptionalParameterCommand(3, new RelayByte[] { 1, 2, 3, 4, 5, 6 }, "NextRelayCount")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter(),
				Parameter2Converter = new RelayCountParameterConverter()
			};

			/// <summary>
			/// Turn On Relay 2 in Specified Bank.
			/// If the Bank Value is 0, this command will be directed to all available relay banks.
			/// An optional parameter may be included to turn on the next 1 to 5 relays.
			/// </summary>
			public static RelayCommandSet<bool, int, RelayCount> RelayTwoOn = new RelayCommandSet<bool, int, RelayCount>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 110),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank"),
					RelayCommand.CreateOptionalParameterCommand(3, new RelayByte[] { 1, 2, 3, 4, 5 }, "NextRelayCount")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter(),
				Parameter2Converter = new RelayCountParameterConverter()
			};

			/// <summary>
			/// Turn On Relay 3 in Specified Bank.
			/// If the Bank Value is 0, this command will be directed all available relay banks.
			/// An optional parameter may be included to turn on the next 1 to 4 relays.
			/// </summary>
			public static RelayCommandSet<bool, int, RelayCount> RelayThreeOn = new RelayCommandSet<bool, int, RelayCount>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 111),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank"),
					RelayCommand.CreateOptionalParameterCommand(3, new RelayByte[] { 1, 2, 3, 4 }, "NextRelayCount")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter(),
				Parameter2Converter = new RelayCountParameterConverter()
			};

			/// <summary>
			/// Turn On Relay 4 in Specified Bank.
			/// If the Bank Value is 0, this command will be directed to all available relay banks.
			/// An optional parameter may be included to turn on the next 1 to 3 relays.
			/// </summary>
			public static RelayCommandSet<bool, int, RelayCount> RelayFourOn = new RelayCommandSet<bool, int, RelayCount>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 112),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank"),
					RelayCommand.CreateOptionalParameterCommand(3, new RelayByte[] { 1, 2, 3 }, "NextRelayCount")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter(),
				Parameter2Converter = new RelayCountParameterConverter()
			};

			/// <summary>
			/// Turn On Relay 5 in Specified Bank.
			/// If the Bank Value is 0, this command will be directed to all available relay banks.
			/// An optional parameter may be included to turn on the next 1 to 2 relays.
			/// </summary>
			public static RelayCommandSet<bool, int, RelayCount> RelayFiveOn = new RelayCommandSet<bool, int, RelayCount>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 113),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank"),
					RelayCommand.CreateOptionalParameterCommand(3, new RelayByte[] { 1, 2 }, "NextRelayCount")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter(),
				Parameter2Converter = new RelayCountParameterConverter()
			};

			/// <summary>
			/// Turn On Relay 6 in Specified Bank.
			/// If the Bank Value is 0, this command will be directed to all available relay banks.
			/// An optional parameter may be included to turn on the next relay.
			/// </summary>
			public static RelayCommandSet<bool, int, RelayCount> RelaySixOn = new RelayCommandSet<bool, int, RelayCount>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 114),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank"),
					RelayCommand.CreateOptionalParameterCommand(3, new RelayByte[] { 1 }, "NextRelayCount")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter(),
				Parameter2Converter = new RelayCountParameterConverter()
			};

			/// <summary>
			/// Turn On Relay 7 in Specified Bank.
			/// If the Bank Value is 0, this command will be directed to all available relay banks.
			/// </summary>
			public static RelayCommandSet<bool, int> RelaySevenOn = new RelayCommandSet<bool, int>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 115),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter()
			};
			#endregion

			#region Status
			/// <summary>
			/// Read the Status of Relay 0 in Specified Bank.
			/// A Bank Value of 0 is Not Valid for this command.
			/// This command will return a 1 or 0 indicating On/Off status of Relay.
			/// </summary>
			public static RelayCommandSet<RelayStatus, int> ReportRelayZeroStatus = new RelayCommandSet<RelayStatus, int>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 116),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank")
				},
				ExpectedResults = new RelayByte[] { 0, 1 },
				ResponseConverter = new RelayStatusResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter()
			};

			/// <summary>
			/// Read the status of Relay 1 in Specified Bank.
			/// A Bank Value of 0 is Not Valid for this command.
			/// This command will return a1 or 0 indicating On/Off status of Relay
			/// </summary>
			public static RelayCommandSet<RelayStatus, int> ReportRelayOneStatus = new RelayCommandSet<RelayStatus, int>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 117),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank")
				},
				ExpectedResults = new RelayByte[] { 0, 1 },
				ResponseConverter = new RelayStatusResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter()
			};

			/// <summary>
			/// Read the status of Relay 2 in Specified Bank.
			/// A Bank Value of 0 is Not Valid for this command.
			/// This command will return a 1 or a 0 indicating On/Off status of the Relay.
			/// </summary>
			public static RelayCommandSet<RelayStatus, int> ReportRelayTwoStatus = new RelayCommandSet<RelayStatus, int>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 118),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank")
				},
				ExpectedResults = new RelayByte[] { 0, 1 },
				ResponseConverter = new RelayStatusResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter()
			};

			/// <summary>
			/// Read the status of Relay 3 in Specified Bank.
			/// A Bank Value of 0 is Not Valid for this command.
			/// This command will return a 1 or 0 indicating the On/Off Status of the Relay.
			/// </summary>
			public static RelayCommandSet<RelayStatus, int> ReportRelayThreeStatus = new RelayCommandSet<RelayStatus, int>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 119),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank")
				},
				ExpectedResults = new RelayByte[] { 0, 1 },
				ResponseConverter = new RelayStatusResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter()
			};

			/// <summary>
			/// Read the status of Relay 4 in Specified Bank.
			/// A Bank Value of 0 is Not Valid for this command.
			/// This command will return a 1 or 0 indicating the On/Off status of the Relay.
			/// </summary>
			public static RelayCommandSet<RelayStatus, int> ReportRelayFourStatus = new RelayCommandSet<RelayStatus, int>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 120),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank")
				},
				ExpectedResults = new RelayByte[] { 0, 1 },
				ResponseConverter = new RelayStatusResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter()
			};

			/// <summary>
			/// Read the Status of Relay 5 in Specified Bank.
			/// A Bank Value of 0 is Not Valid for this command.
			/// This command will return a 1 or 0 indicating the On/Off status of the Relay.
			/// </summary>
			public static RelayCommandSet<RelayStatus, int> ReportRelayFiveStatus = new RelayCommandSet<RelayStatus, int>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 121),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank")
				},
				ExpectedResults = new RelayByte[] { 0, 1 },
				ResponseConverter = new RelayStatusResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter()
			};

			/// <summary>
			/// Read the Status of Relay 6 in Specified Bank.
			/// A Bank Value of 0 is Not Valid for this command.
			/// This command Will return a 1 or a 0 indicating the On/Off status of the relay.
			/// </summary>
			public static RelayCommandSet<RelayStatus, int> ReportRelaySixStatus = new RelayCommandSet<RelayStatus, int>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 122),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank")
				},
				ExpectedResults = new RelayByte[] { 0, 1 },
				ResponseConverter = new RelayStatusResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter()
			};

			/// <summary>
			/// Read the status of Relay 7 in Specified Bank.
			/// A Bank Value of 0 is Not Valid for this command.
			/// This command will return a 1 or a 0 indicating the On/Off status of the relay.
			/// </summary>
			public static RelayCommandSet<RelayStatus, int> ReportRelaySevenStatus = new RelayCommandSet<RelayStatus, int>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 123),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank")
				},
				ExpectedResults = new RelayByte[] { 0, 1 },
				ResponseConverter = new RelayStatusResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter()
			};
			#endregion

			#region Other
			/// <summary>
			/// Reports the current status of 8 relays in the Currently Selected Relay Bank. If the Bank Value 
			/// equals 0 then 32 bytes will be returned by this command representing the status of the first 32 
			/// relay banks. Each byte returned from the controller will have a value from 0 to 255. Convert this 
			/// value to Binary to see the On/Off status of each relay in the relay bank.
			/// </summary>
			public static RelayCommandSet<int, int> ReportRelayStatus = new RelayCommandSet<int, int>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 124),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank")
				},
				ExpectedResults = (new RelayByte[0]).CreateRange(0, 255),
				ResponseConverter = new Int32ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter()
			};

			/// <summary>
			/// Reports the current status of 32 Banks of Relays. Optional; Parameter [0-255] indicates the group. If 
			/// this optional parameter is not used or contains 0, the first 32 relay banks will be reported. A Value of 
			/// 1 reports the status of the next group of 32 relay banks. Value of 2 reports the 3rd group of 32 relay banks.
			/// </summary>
			public static RelayCommandSet<int, int> ReportAllRelayStatus = new RelayCommandSet<int, int>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 124),
					RelayCommand.CreateReadOnlyCommand(1, 0),
					RelayCommand.CreateNonOptionalParameterCommand(3, (new RelayByte[0]).CreateRange(0, 255), "Bank")
				},
				ExpectedResults = (new RelayByte[0]).CreateRange(0, 255),
				ResponseConverter = new Int32ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter()
			};

			/// <summary>
			/// Turn Off All Relays. If the currently selected relay bank is 0 then all relays will be turned off in all relay banks.
			/// </summary>
			public static RelayCommandSet<bool, int> TurnAllRelaysOff = new RelayCommandSet<bool, int>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 129),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter()
			};

			/// <summary>
			/// Turn On All Relays. If the currently selected relay bank is 0 then all relays will be turned on in all relay banks.
			/// </summary>
			public static RelayCommandSet<bool, int> TurnAllRelaysOn = new RelayCommandSet<bool, int>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 130),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter()
			};

			/// <summary>
			/// Inverts the status of all relays in the currently selected relay bank. All relays that are off will turn on. All 
			/// relays that are on will turn off. If a Bank Value of 0 is selected, all relays in all relay banks will be inverters.
			/// </summary>
			public static RelayCommandSet<bool, int> InvertAllRelays = new RelayCommandSet<bool, int>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 131),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter()
			};

			/// <summary>
			/// Reverses the status of all relays in the currently selected relay bank. This command effectively swaps the status of all relays like a mirror:
			/// The status of Relay 1 is copied to Relay 8.
			/// The status of Relay 2 is copied to Relay 7.
			/// The status of Relay 3 is coped to Relay 6.
			/// The status of Relay 4 is copied to Relay 5.
			/// The status of Relay 5 is copied to Relay 4.
			/// The status of Relay 6 is copied to Relay 3.
			/// The status of Relay 7 is copied to Relay 2.
			/// The status of Relay 8 is copied to Relay 1.
			/// If the bank value of 0 is selected, all relays in all relay banks will be reversed.
			/// </summary>
			public static RelayCommandSet<bool, int> ReverseAllRelays = new RelayCommandSet<bool, int>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 132),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255), "Bank")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter()
			};

			/// <summary>
			/// Sets the status of all relays in the currently selected relay bank. This command requires a parameter 
			/// value of 0-255. This parameter sets the status of all relays to the binary equivalent value. 254, 40, 0 
			/// turns off all relays. 254, 40, 255 turns on all relays. 254, 40, 85 turns off every other relay. If a bank 
			/// value of 0 is selected, this command will set the status of all relays in all relay banks.
			/// </summary>
			public static RelayCommandSet<bool, int, int> SetRelayStatus = new RelayCommandSet<bool, int, int>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 140),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255)),
					RelayCommand.CreateNonOptionalParameterCommand(3, (new RelayByte[0]).CreateRange(0, 255), "Bank")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter(),
				Parameter2Converter = new Int32ParameterConverter()
			};

			/// <summary>
			/// This command stores the current state of all relays as the power-up default state. 254, 42, 0 stores all relays in all 
			/// banks. 254, 42, 1 stores the current status of bank 1 only. The maximum possible value depends on how many relay banks 
			/// are attached. If your controller supports 255 relay banks, then 255 may be used.
			/// </summary>
			public static RelayCommandSet<bool, int, int> StoreRelayState = new RelayCommandSet<bool, int, int>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 142),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255)),
					RelayCommand.CreateNonOptionalParameterCommand(3, (new RelayByte[0]).CreateRange(0, 255), "Bank")
				},
				ExpectedResults = new RelayByte[] { 85 },
				ResponseConverter = new Boolean85ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter(),
				Parameter2Converter = new Int32ParameterConverter()
			};

			/// <summary>
			/// This command reports the power-up default status of relays in the selected relay bank. If Bank 0 is selected (254, 43, 0) 
			/// then the controller reports the status of the first 32 relay banks. 255 is the maximum value for this command if your 
			/// particular controller supports 255 relay banks. The maximum value for this command will depend on the ATBanks (attached 
			/// relay banks supported by your controller). This command reports a value of 0-255 indicating the power-up default status 
			/// of the selected bank.
			/// </summary>
			public static RelayCommandSet<int, int, int> GetPowerupDefaults = new RelayCommandSet<int, int, int>()
			{
				Commands = new RelayCommand[]
				{
					RelayCommand.Command254,
					RelayCommand.CreateReadOnlyCommand(1, 143),
					RelayCommand.CreateNonOptionalParameterCommand(2, (new RelayByte[0]).CreateRange(0, 255)),
					RelayCommand.CreateNonOptionalParameterCommand(3, (new RelayByte[0]).CreateRange(0, 255), "Bank")
				},
				ExpectedResults = (new RelayByte[0]).CreateRange(0, 255),
				ResponseConverter = new Int32ResponseConverter(),
				Parameter1Converter = new Int32ParameterConverter(),
				Parameter2Converter = new Int32ParameterConverter()
			};
			#endregion
		}
	}
}
